#ifndef __BATTERY_H_
#define __BATTERY_H_

// clang-format off
/* =========================== 用户配置 =========================== */
#include "main.h"
#include "System/ADC/adc.h"

/* 去极值滤波配置 */
#define BAT_FILTER_LEN   2         // 缓存点数
#define BAT_FILTER_DROP  0          // 去掉最大与最小的个数 

#define BATTERY_ADC_MAX         4095.0f     // STM32 ADC 12位最大值
#define BATTERY_ADC_VREF        3.3f        // ADC参考电压（根据你实际设置）
#define BATTERY_VOLTAGE_DIVIDER 2.0f        // 分压比例（两个100k电阻）

#define BATTERY_VOLTAGE_MIN     3.35f       // 电池最低电压（根据你电池规格）
#define BATTERY_VOLTAGE_MAX     4.05f       // 电池满电电压（根据你电池规格）
#define BATTERY_OFFSET_V        0.14f       // 电路电压补偿

#define BATTERY_CHARGE_VOLTAGE  4.5f        // 电池充电电压（根据你电池规格）

static inline uint16_t GET_ADC(void)    /* 用户获取ADC值函数 */
{
	 return adc_get_value(0);
}

/* =========================== 外部声明 =========================== */

/**
 * @brief       获取电池电压（单位：V）
 * @retval      电池电压
 */
float battery_get_voltage(void);

/**
 * @brief       获取电池剩余电量百分比（0~100）
 * @retval      电量百分比
 */
uint8_t battery_get_percentage(void);

/**
 * @brief       检查电池是否正在充电
 * @retval      1：正在充电；0：未充电
 */
uint8_t battery_check_charge(void);

#endif
